#include "serialdialog.h"
#include "ui_serialdialog.h"
#include <QTimer>
struct serialPara_t {
    QString portName;    // 串口名称
    int baudRate;        // 波特率
    int dataBits;        // 数据位
    int stopBits;        // 停止位
    int parity;          // 校验位
    int flowControl;     // 流控
};
serialDialog::serialDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::serialDialog)
{
    ui->setupUi(this);
    // 连接 OK 按钮的点击事件
    connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &serialDialog::onOkClicked);
    // 初始化串口下拉框
    updateSerialPorts();

    // 可选：使用定时器定期刷新串口列表（例如每 2 秒刷新一次）
    QTimer *timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &serialDialog::updateSerialPorts);
    timer->start(2000);
}

serialDialog::~serialDialog()
{
    delete ui;
}
// 当点击 OK 按钮时，发射串口配置信号
void serialDialog::onOkClicked()
{
    // 检查是否有有效串口
    if (ui->comBox_uartPort->currentText() == "No available ports") {
        QMessageBox::warning(this, "Warning", "No available ports to configure.");
        return;
    }
   // 获取界面上的配置信息
    QString port = ui->comBox_uartPort->currentText();     // 串口号
    int baudRate = ui->comBox_uartDps->currentText().toInt(); // 波特率
    int dataBits = ui->comBox_uartDataLen->currentText().toInt(); // 数据位
    int parity = ui->comBox_uartCheckBit->currentIndex();    // 校验位（例如 0: 无校验, 1: 奇校验, 2: 偶校验）
    int stopBits = ui->comBox_uartStopBit->currentText().toInt(); // 停止位
    QString control=ui->comBox_uartFlowControl->currentText();//流控

    // 关闭对话框
    accept();}
void serialDialog::updateSerialPorts()
{
    // 清空当前的串口列表
    ui->comBox_uartPort->clear();

    // 获取当前可用的串口
    const QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();

    // 遍历可用的串口并添加到下拉框
    for (const QSerialPortInfo &portInfo : ports) {
        ui->comBox_uartPort->addItem(portInfo.portName());
    }

    // 如果没有可用的串口，添加提示信息
    if (ui->comBox_uartPort->count() == 0) {
        ui->comBox_uartPort->addItem("No available ports");
    }
}
